﻿using System;
using System.Data;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Data.SqlClient;
using DevExpress.XtraGrid.Views.Grid;

namespace FiyatDegisikligi
{
    public partial class frmTopluDegisiklik : XtraForm
    {
        public GridView Grid { get; set; }
        public DataTable Data { get; set; }

        public frmTopluDegisiklik()
        {
            InitializeComponent();
            this.repButton.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(repButton_ButtonClick);
        }

        void repButton_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            frmListe liste = new frmListe();
            liste.ListeTipi = (frmListe.ListeTipleri)gridView1.FocusedRowHandle;
            liste.Filtre = "*";
            if (liste.ShowDialog() == DialogResult.OK)
            {
                gridView1.SetRowCellValue(this.gridView1.FocusedRowHandle, gridView1.Columns[3], liste.StokKod);
            }
        }

        private void DataCreate()
        {
            StringBuilder sb = new StringBuilder();
            string alanAdi = string.Empty;
            string alanDeger = string.Empty;

            if (cmbFiyat1.SelectedIndex > -1 && cmbFiyat2.SelectedIndex > -1 && !string.IsNullOrEmpty(txtOran.Text) && cmbTip.SelectedIndex > -1)
            {
                sb.AppendFormat("select sto_kod,sto_isim,dbo.fn_StokSatisFiyati(sto_kod,{0},0) as fiyat from STOKLAR where ", cmbFiyat2.SelectedIndex + 1);
            }
            else
            {
                sb.Append("select sto_kod,sto_isim,cast(0 as float) as fiyat from STOKLAR where ");
            }

            for (int i = 0; i < gridView1.RowCount; i++)
            {
                alanAdi = gridView1.GetRowCellValue(i, gridView1.Columns[0]).ToString();
                alanDeger = gridView1.GetRowCellValue(i, gridView1.Columns[3]).ToString();
                if (!string.IsNullOrEmpty(alanDeger))
                {
                    switch (gridView1.GetRowCellValue(i, gridView1.Columns[2]).ToString())
                    {
                        case "Eşit":
                            sb.AppendFormat("{0} = '{1}' and ", alanAdi, alanDeger);
                            break;
                        case "Eşit Değil":
                            sb.AppendFormat("{0} <> '{1}' and ", alanAdi, alanDeger);
                            break;
                        case "İçerir":
                            sb.AppendFormat("{0} like '%{1}%' and ", alanAdi, alanDeger);
                            break;
                        case "İçermez":
                            sb.AppendFormat("{0} not like '{1}' and ", alanAdi, alanDeger);
                            break;
                        case "ile Başlayan":
                            sb.AppendFormat("{0} like '{1}%' and ", alanAdi, alanDeger);
                            break;
                        case "ile Biten":
                            sb.AppendFormat("{0} like '%{1}' and ", alanAdi, alanDeger);
                            break;
                    }
                }
            }
            sb.Remove(sb.Length - 4, 4);

            if (!string.IsNullOrEmpty(sb.ToString()))
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("stokkod", typeof(string));
                dt.Columns.Add("stokad", typeof(string));
                dt.Columns.Add("depo", typeof(string));

                object[] dizi = new object[gridView2.RowCount + 3];

                for (int i = 0; i < gridView2.RowCount; i++)
                {
                    dt.Columns.Add("fiyat" + (i + 1).ToString(), typeof(decimal));
                    dizi[i + 3] = Cevir.Parse<decimal>(gridView2.GetRowCellDisplayText(i, gridView2.Columns[2]));
                }
                SqlDataReader rd = DataLayer.Get.Reader(sb.ToString());
                if (rd.HasRows)
                {
                    while (rd.Read())
                    {
                        dizi[0] = rd.GetString(0);
                        dizi[1] = rd.GetString(1);
                        for (int i = 0; i < ComboBoxEdit1.Properties.Items.Count; i++)
                        {
                            if (ComboBoxEdit1.Properties.Items[i].CheckState == CheckState.Checked)
                            {
                                dizi[2] = ComboBoxEdit1.Properties.Items[i].Value;
                                if (cmbFiyat1.SelectedIndex > -1 && cmbFiyat2.SelectedIndex > -1 && !string.IsNullOrEmpty(txtOran.Text) && cmbTip.SelectedIndex > -1)
                                {
                                    if (cmbTip.SelectedIndex == 0) //arttır
                                    {
                                        dizi[cmbFiyat2.SelectedIndex + 3] = rd.GetDouble(2) * ((100 + Cevir.Parse<double>(txtOran.Text)) / 100);
                                    }
                                    else //azalt
                                    {
                                        dizi[cmbFiyat2.SelectedIndex + 3] = rd.GetDouble(3) / ((100 + Cevir.Parse<double>(txtOran.Text)) / 100);
                                    }
                                }
                                dt.Rows.Add(dizi);
                            }
                        }
                    }
                }
                rd.Close();

                this.Data = dt;
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
        }
        private void DepoYukle()
        {
            ComboBoxEdit1.Properties.Items.Add("0-Genel");
            SqlDataReader rd = DataLayer.Get.Reader("SELECT     dep_no, dep_adi  FROM DEPOLAR");
            while (rd.Read())
            {
                ComboBoxEdit1.Properties.Items.Add(rd.GetInt32(0).ToString() + "-" + rd.GetString(1));
            }
            rd.Close();
        }

        private void TopluAlanColumn()
        {
            DataTable gridData = new DataTable();
            gridData.Columns.Add("dbadi", typeof(string));
            gridData.Columns.Add("Filtre Alanı", typeof(string));
            gridData.Columns.Add("Değer", typeof(string));

            gridData.Rows.Add("sto_anagrup_kod", "Ana Grup Kodu", "");
            gridData.Rows.Add("sto_altgrup_kod", "Alt Grup Kodu", "");
            gridData.Rows.Add("sto_urun_sorkod", "Ana Sağlayıcı Kodu", "");
            gridData.Rows.Add("sto_uretici_kodu", "Üretici Kodu", "");
            gridData.Rows.Add("sto_reyon_kodu", "Reyon Kodu", "");
            gridData.Rows.Add("sto_ambalaj_kodu", "Ambalaj Kodu", "");
            gridData.Rows.Add("sto_marka_kodu", "Marka Kodu", "");
            gridData.Rows.Add("sto_muhgrup_kodu", "Muhasebe Grup Kodu", "");
            gridData.Rows.Add("sto_sektor_kodu", "Sektör Kodu", "");
            gridData.Rows.Add("sto_kategori_kodu", "Kategori Kodu", "");
            gridData.Rows.Add("sto_beden_kodu", "Beden Kodu", "");
            gridData.Rows.Add("sto_renk_kodu", "Renk Kodu", "");
            gridData.Rows.Add("sto_model_kodu", "Model Kodu", "");
            gridData.Rows.Add("sto_sezon_kodu", "Sezon Kodu", "");
            gridData.Rows.Add("sto_hammadde_kodu", "Hammadde Kodu", "");
            gridData.Rows.Add("sto_prim_kodu", "Prim Kodu", "");
            gridData.Rows.Add("sto_kalkon_kodu", "Kalite Kontrol Kodu", "");
            gridData.Rows.Add("sto_paket_kodu", "Paket Kodu", "");
            gridControl3.DataSource = gridData;
            gridView3.Columns[0].Visible = false;
            gridView3.BestFitColumns();
        }

        private void frmTopluDegisiklik_Load(object sender, EventArgs e)
        {
            DepoYukle();
            TopluAlanColumn();

            DataTable gridData = new DataTable();
            gridData.Columns.Add("dbadi", typeof(string));
            gridData.Columns.Add("Filtre Alanı", typeof(string));
            gridData.Columns.Add("Filtre Tipi", typeof(string));
            gridData.Columns.Add("Değer", typeof(string));

            gridData.Rows.Add("sto_kod", "Stok Kodu", "Eşit", "");
            gridData.Rows.Add("sto_isim", "Stok Adı", "Eşit", "");
            gridData.Rows.Add("sto_anagrup_kod", "Ana Grup Kodu", "Eşit", "");
            gridData.Rows.Add("sto_altgrup_kod", "Alt Grup Kodu", "Eşit", "");
            gridData.Rows.Add("sto_urun_sorkod", "Ana Sağlayıcı Kodu", "Eşit", "");
            gridData.Rows.Add("sto_uretici_kodu", "Üretici Kodu", "Eşit", "");
            gridData.Rows.Add("sto_reyon_kodu", "Reyon Kodu", "Eşit", "");
            gridData.Rows.Add("sto_ambalaj_kodu", "Ambalaj Kodu", "Eşit", "");
            gridData.Rows.Add("sto_marka_kodu", "Marka Kodu", "Eşit", "");
            gridData.Rows.Add("sto_muhgrup_kodu", "Muhasebe Grup Kodu", "Eşit", "");
            gridData.Rows.Add("sto_sektor_kodu", "Sektör Kodu", "Eşit", "");
            gridData.Rows.Add("sto_kategori_kodu", "Kategori Kodu", "Eşit", "");
            gridData.Rows.Add("sto_beden_kodu", "Beden Kodu", "Eşit", "");
            gridData.Rows.Add("sto_renk_kodu", "Renk Kodu", "Eşit", "");
            gridData.Rows.Add("sto_model_kodu", "Model Kodu", "Eşit", "");
            gridData.Rows.Add("sto_sezon_kodu", "Sezon Kodu", "Eşit", "");
            gridData.Rows.Add("sto_hammadde_kodu", "Hammadde Kodu", "Eşit", "");
            gridData.Rows.Add("sto_prim_kodu", "Prim Kodu", "Eşit", "");
            gridData.Rows.Add("sto_kalkon_kodu", "Kalite Kontrol Kodu", "Eşit", "");
            gridData.Rows.Add("sto_paket_kodu", "Paket Kodu", "Eşit", "");

            DataTable dt = new DataTable();
            dt.Columns.Add("fiyat_no", typeof(int));
            dt.Columns.Add("Fiyat Adı", typeof(string));
            dt.Columns.Add("Fiyat", typeof(decimal));

            SqlDataReader rd = DataLayer.Get.Reader("SELECT sfl_sirano,sfl_aciklama FROM STOK_SATIS_FIYAT_LISTE_TANIMLARI WITH ( NOLOCK , INDEX = NDX_STOK_SATIS_FIYAT_LISTE_TANIMLARI_02 )");
            while (rd.Read())
            {
                dt.Rows.Add(rd.GetInt32(0), rd.GetString(1), 0m);
                cmbFiyat1.Properties.Items.Add(rd.GetString(1));
                cmbFiyat2.Properties.Items.Add(rd.GetString(1));
            }
            rd.Close();


            gridControl1.DataSource = gridData;
            gridView1.Columns[0].Visible = false;
            gridView1.Columns[0].OptionsColumn.AllowEdit = false;
            gridView1.Columns[1].OptionsColumn.AllowEdit = false;
            gridView1.Columns[2].ColumnEdit = repEsitlik;
            gridView1.Columns[3].ColumnEdit = repButton;
            gridView1.Columns[3].Width = 200;

            gridView1.BestFitColumns();

            gridControl2.DataSource = dt;
            gridView2.Columns[0].Visible = false;
            gridView2.Columns[0].OptionsColumn.AllowEdit = false;
            gridView2.Columns[1].OptionsColumn.AllowEdit = false;
            gridView2.BestFitColumns();
        }

        private void simpleButton1_Click(object sender, EventArgs e)
        {
            bool var = false;
            for (int i = 0; i < ComboBoxEdit1.Properties.Items.Count; i++)
            {
                if (ComboBoxEdit1.Properties.Items[i].CheckState == CheckState.Checked)
                {
                    var = true;
                    break;
                }
            }
            if (var)
            {
                DataCreate();
            }
            else
            {
                MessageBox.Show("Lütfen Depo Seçin !");
                ComboBoxEdit1.Focus();
            }
        }

        private void simpleButton2_Click(object sender, EventArgs e)
        {
            string alanAdi;
            string alanDeger;
            for (int r = 0; r < this.Grid.RowCount; r++)
            {
                if (!string.IsNullOrEmpty(this.Grid.GetRowCellValue(r, this.Grid.Columns[0]).ToString()) && !string.IsNullOrEmpty(this.Grid.GetRowCellValue(r, this.Grid.Columns[1]).ToString()))
                {
                    for (int i = 0; i < gridView3.RowCount; i++)
                    {
                        alanAdi = gridView3.GetRowCellValue(i, gridView3.Columns[0]).ToString();
                        alanDeger = gridView3.GetRowCellValue(i, gridView3.Columns[2]).ToString();
                        if (!string.IsNullOrEmpty(alanDeger))
                        {
                            DataLayer.Get.Exec(string.Format("update STOKLAR set {0} ='{1}' where sto_kod='{2}'", alanAdi, alanDeger, this.Grid.GetRowCellValue(r, this.Grid.Columns[0]).ToString()));
                        }
                    }
                }
            }
            MessageBox.Show("Tamamlandı !");
        }

        private void gridView2_CellValueChanging(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            foreach (Control item in panelControl1.Controls)
            {
                item.Enabled = false;
            }
            simpleButton1.Enabled = true;
            ComboBoxEdit1.Enabled = true;
        }

        private void txtOran_TextChanged(object sender, EventArgs e)
        {
            gridControl2.Enabled = false;
        }

        private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            gridView1.BestFitColumns();
        }
    }
}
